__ Altermatic __
  ( Changelog)

This document records front-end changes made to the mod/framework

Changelog Notes Key
"=" (DEV only) signifies change only applies to this release chain
".." (DEV only) lacks testing / requires more testing before release version
">.." (DEV only) Broken when testing, needs fixing before release (or be disabled)

----- ----- ----- ----- -----
Altermatic Version 0.2.1 DEV

Fixed :
  - Reverted delay changed for Altermatic's start-up to fix skipped pal references when SCake is used (wasn't modifying summoned/party pals when loading in do-to an error in SCake, this should work around the issue for now until SCake is updated)

----- ----- ----- ----- -----
Altermatic Version 0.2 DEV

Added :
..  - Altermatic now has persistance through a save JSON system, saves as "_Altermatic_Persist_[worldID].json" (if you want to reset persistance you can delete this file and everything will reset)
..  - With the new JSON saves, added internal systems for tracking which pals have changed to which model to enable consistency between loads/sessions/ect, you can delete/modify the JSON save file to reset/change this behavior ('model' being used is tracked by file path, if file paths conflict then this behavior may be inconsistent, if a file path is no longer registered the character's associated model will be reset)
  - "ReqTrait" to SkelMeshSwap, defined Trait Names in this arary are required for the swap to apply to the Pal/NPC
  - "PrefTrait" to SkelMeshSwap, for each of the defined Trait Names in this array the pal doesn't posess the match quality decreases by 5
..  - "Disable" to SkelMeshSwap (and future swap types), when setting "Disable":"True" the entry will be skipped (useful for quick testing without clearing data in the JSON, can also be useful for users that don't want to clear JSON data but would like to disable certain skins)
  - Passing Null for SkelMeshPath (specifically "SkelMeshPath":"") now counts as a 'do not swap' entry and adds the default model to the random swap pool (In other words, when a SkelMeshPath is specifically excluded, this will add an entry where the current default model/skin is applied, if multiple skins are set up for the same parameters then the default skin is now added to the randomization, if you're using 'naughty' models and need them to have bits I recommend still setting the default path for the swap so it can be more easily removed if undesired in the future)
  - __Create_Load_List__.bat will now try to scan .json files for SkelMeshSwap to try and predict if the json config actually contains swap data (this param would be required for any swap data to be in the JSON so this will prevent invalid json files from even attempting to load, future checks for different swap types will be added in the future, unless I forget X.x)
  - "MorphTarget" param added for SkelMeshSwap, defined as an array of sets which allows the assignment of Morph Targets on the model
  - - "Target" is the name of the Morph Target on the model to alter
  - - "Set" is a hard value to apply (clamps to min/max), if excluded then a random value between Min/Max is applied instead
  - - "Min" is the lowest value allowed, if excluded then "0.0" is applied
  - - "Max" is the highest value allowed, if excluded then "1.0" is applied
  - - "Type" allows either "Free" or "Restrict" to be defined, Free means the value can be anything between Min and Max, Restrict means the value will either be Min or Max, if Type is excluded then Free is applied (Free is useful for body morphs, Restrict is good for feature or Accesory On/Off morphs)
  - Non-Persist flagged characters are now also tracked for more advanced features (not really relevant to the average user yet, more just noting some internal changes that allows much more flexibility and could be utilized by external mods in the future, also worth mentioning that because of technical limitations for performance there is a limit and eventually enough matched params will all equate together, though this value shouldn't be reached by normal means)
..  - Best Match system now allows requirements to improve match quality (added new offset value to keep/allow optimizations while allowing a dynamic 'perfect match' value)
..  - Added 'Fallback' for SkelMeshSwap Gender parameter to allow better compatibility with and without SCake installed, now Gender is allowed to not match but with a degraded match quality under specific conditions (Should only apply mis-matched genders if no gender matching swap is found)

Changed :
  - In SkelMeshSwap, increased Match Quality penalty when not matching to Rare Pal by 4 times (5 > 20)
  - The "Best Match" system now accounts for met requirements such as ReqTrait, ReqTrait improves match quality so meeting multiple requirements will result in a higher match quality at this comparison step (Note that other factors could still increase the Match Quality so just because a swap matches multiple requirements doesn't mean it will always be selected)

Fixed :
  - SkelMeshSwap should now properly apply to NPCs that are not Pals (When testing I had enabled a check for pals only and forgot to disable this check before release, sorry!)
..  - SkelMeshPath will now check for full reference paths and assume they are correct without trying to add the reference script values (as in, paths that start with " /Script/Engine.SkeletalMesh' " will be assumed as already formatted correctly for loading in-game and no additional formatting will be applied, this change is technically an add, but given it fixes undesired behavior I'm classifying it as a fix)
  - __Create_Load_List__.bat will now properly run in admin mode for all users regardless of your environment set up (while in windows at least)
	- __Create_Load_List__.bat now properly checks for the .json extension before adding to the list
..  - Captured pals/NPCs should now be flagged to Persist, preventing pals switching models after being captured then summoned
..  - Pal/NPC validity is now checked before saving to prevent unexpected behavior in save output
..  - Optimized Best Match / Random selection system to fail quicker when comparing matches so less data is processed per compare

----- ----- ----- ----- -----
Altermatic Version 0.1 DEV [Initial release]

Added :
  - Ability to swap Skeletal Meshes for NPCs, defined by either CharacterID or BPClass (from DataTable), then applied by Gender (None/Male/Female)
  - When multiple SkelMesh are compatible a random one will be selected based on best-match cases
  - Added "MatchQuality" to the randomization, when failing to meet optional requirements the match quality will degrade, when selecting a final SkelMesh to apply only the highest quality grade available will be selected to ensure the best matches are used
  - Added "IsRarePal" option for JSON, when set to "True" then the pal must be rare for the skin to apply
  - Added "Skin Name" option for JSON, when applied the SkinName must match the internal skin name the pal has equipped (this feature is incomplete since it does not apply when applying skins, only when loading a pal that 'should' have a skin)
  - integrations with SCake Additional Genders, also enabled cross-functions which improves Altermatic's performance while SCake is running